home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / runpy.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  3KB  |  96 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. '''runpy.py - locating and running Python code using the module namespace
  5.  
  6. Provides support for locating and running Python scripts using the Python
  7. module namespace instead of the native filesystem.
  8.  
  9. This allows Python code to play nicely with non-filesystem based PEP 302
  10. importers when locating support scripts as well as when importing modules.
  11. '''
  12. import sys
  13. import imp
  14.  
  15. try:
  16.     from imp import get_loader
  17. except ImportError:
  18.     from pkgutil import get_loader
  19.  
  20. __all__ = [
  21.     'run_module']
  22.  
  23. def _run_code(code, run_globals, init_globals, mod_name, mod_fname, mod_loader):
  24.     '''Helper for _run_module_code'''
  25.     if init_globals is not None:
  26.         run_globals.update(init_globals)
  27.     
  28.     run_globals.update(__name__ = mod_name, __file__ = mod_fname, __loader__ = mod_loader)
  29.     exec code in run_globals
  30.     return run_globals
  31.  
  32.  
  33. def _run_module_code(code, init_globals = None, mod_name = None, mod_fname = None, mod_loader = None, alter_sys = False):
  34.     '''Helper for run_module'''
  35.     if alter_sys:
  36.         temp_module = imp.new_module(mod_name)
  37.         mod_globals = temp_module.__dict__
  38.         saved_argv0 = sys.argv[0]
  39.         restore_module = mod_name in sys.modules
  40.         if restore_module:
  41.             saved_module = sys.modules[mod_name]
  42.         
  43.         sys.argv[0] = mod_fname
  44.         sys.modules[mod_name] = temp_module
  45.         
  46.         try:
  47.             _run_code(code, mod_globals, init_globals, mod_name, mod_fname, mod_loader)
  48.         finally:
  49.             sys.argv[0] = saved_argv0
  50.  
  51.         if restore_module:
  52.             sys.modules[mod_name] = saved_module
  53.         else:
  54.             del sys.modules[mod_name]
  55.         return mod_globals.copy()
  56.     else:
  57.         return _run_code(code, { }, init_globals, mod_name, mod_fname, mod_loader)
  58.  
  59.  
  60. def _get_filename(loader, mod_name):
  61.     
  62.     try:
  63.         get_filename = loader.get_filename
  64.     except AttributeError:
  65.         return None
  66.  
  67.     return get_filename(mod_name)
  68.  
  69.  
  70. def run_module(mod_name, init_globals = None, run_name = None, alter_sys = False):
  71.     """Execute a module's code without importing it
  72.  
  73.        Returns the resulting top level namespace dictionary
  74.     """
  75.     loader = get_loader(mod_name)
  76.     if loader is None:
  77.         raise ImportError('No module named ' + mod_name)
  78.     
  79.     code = loader.get_code(mod_name)
  80.     if code is None:
  81.         raise ImportError('No code object available for ' + mod_name)
  82.     
  83.     filename = _get_filename(loader, mod_name)
  84.     if run_name is None:
  85.         run_name = mod_name
  86.     
  87.     return _run_module_code(code, init_globals, run_name, filename, loader, alter_sys)
  88.  
  89. if __name__ == '__main__':
  90.     if len(sys.argv) < 2:
  91.         print >>sys.stderr, 'No module specified for execution'
  92.     else:
  93.         del sys.argv[0]
  94.         run_module(sys.argv[0], run_name = '__main__', alter_sys = True)
  95.  
  96.